/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clientesocket;

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 * 
 * @author Leo
 */

/*
 * clase que permite la carga y descarga de archivos que posee el cliente
 */
public class CargaDescargaArchivo {
    private String ruta;

    public CargaDescargaArchivo(String ruta) {
        this.ruta = ruta;
    }
    /**
     * Metodo que carga la lista de archivos leyendo del archivo XML
     * 
     */
    
    public void cargaArchivos(VentanaCliente ventanita) {
        try {
            long numCantidad;
            String estadoA="";
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = builder.build(ruta+"ListaArchivos.xml");
            Element raiz = doc.getRootElement();
            List listaarchivos = raiz.getChildren("archivo");
            Iterator k = listaarchivos.iterator();
            while (k.hasNext()) {
                int i = 0, j = 0;
                Element e = (Element) k.next();
                Element nombre = e.getChild("nombre");
                Element cantidad = e.getChild("cantidad");
                Element total = e.getChild("total");
                Element estado = e.getChild("estado");
                Element ruta = e.getChild("ruta");
                Element s1 = e.getChild("s1");
                Element s2 = e.getChild("s2");
                Element s3 = e.getChild("s3");

                File f = new File(ruta.getText() + nombre.getText());

                if (estado.getText().equals("Pausada la Descarga")) {
                    numCantidad = f.length() / 1000;
                    if(Long.toString(numCantidad).equals(total.getText()))
                        estadoA = "Descarga Completada";
                } else {
                    numCantidad = Long.valueOf(cantidad.getText());
                    estadoA = estado.getText();
                }
                
                ventanita.agregarfilaarchivo(nombre.getText(), numCantidad, Long.valueOf(total.getText()), estadoA, ruta.getText(), Long.valueOf(s1.getText()), Long.valueOf(s2.getText()), Long.valueOf(s3.getText()));
            }
        } catch (FileNotFoundException F) {
            System.out.println("Archivo XML no encontrado");
        } catch (Exception e) {
            System.out.println("Xml no tiene nada");
        }
    }

    /**
     * Metodo que genera un nodo de elemento archivo en el archivo xml
     */
    public class agregarArchivo extends Element {

        public agregarArchivo(Archivo archivo) {
            super("archivo");
            addContent(new Element("nombre").setText(archivo.getNombreArchivo()));
            addContent(new Element("cantidad").setText(Long.toString(archivo.getCantidad())));
            addContent(new Element("total").setText(Long.toString(archivo.getTotal())));
            addContent(new Element("estado").setText(archivo.getEstado()));
            addContent(new Element("ruta").setText(archivo.getRuta()));
            addContent(new Element("s1").setText(Long.toString(archivo.getS1())));
            addContent(new Element("s2").setText(Long.toString(archivo.getS2())));
            addContent(new Element("s3").setText(Long.toString(archivo.getS3())));
        }
    }

    /**
     * metodo que escribe la lista de archivos en el XML
     * 
     */
    public void escribirArchivos(VentanaCliente ventanita) {
        int i = 0;
        Element root = new Element("archivos");

        for (i = 0; i < ventanita.getRowCount(); i++) {
            agregarArchivo nuevo = new agregarArchivo(ventanita.getArchivo(i));
            root.addContent(nuevo);
        }
        Document doc = new Document(root);
        try {
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            FileWriter writer = new FileWriter(ruta+"ListaArchivos.xml");
            out.output(doc, writer);
        } catch (java.io.IOException e) {
            System.out.println("Problema con I/O al escribir el xml");
        } catch (Exception e) {
            System.out.println("Problema al escribir el xml");
        }
    }
}
